package eventos.aceptar;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JOptionPane;

import logica.AtributoRepetidoException;
import logica.EntidadRepetidaException;
import logica.IdExternoInexistenteException;
import logica.Relacion;
import logica.RelacionException;
import logica.SinNombreException;

import controlador.IObjDelModConRefExternaEntidad;
import controlador.NoExisteEntidadGraficable;

import vista.objetos.AtributoTipoNoSoportadoException;
import vista.objetos.GraficableException;
import vista.objetos.ProyectoGraficable;
import vista.objetos.RelacionGraficable;
import vista.paneles.NingunElementoSeleccionadoException;
import vista.paneles.TipoEvento;
import vista.ventanas.VentanaRelacion;

public class EventoAceptarRelacionNueva  extends MouseAdapter {
	
	private VentanaRelacion ventana;
	private IObjDelModConRefExternaEntidad controlador;
	
	public EventoAceptarRelacionNueva(VentanaRelacion ventana, IObjDelModConRefExternaEntidad controlador)
	{
		super();
		this.ventana = ventana;
		this.controlador = controlador;
	}
	
	public void mouseClicked(MouseEvent e)
	{	
		ProyectoGraficable  proyecto = this.controlador.getProyectoActual();
		
		try 
		{
			Relacion relacion = this.ventana.getRelacion();
			
			this.controlador.verificarSiSePuedeAgregarObjeto(relacion);
			
			this.ventana.setVisible(false);
			
			RelacionGraficable relacionGraf = this.ventana.getFabricaRelacionGraficable().crearRelacionGraficable(relacion);
			relacionGraf.setAtributos(proyecto.getAtributoGraficables(relacion.getAtributos()));
			relacionGraf.setEntidadesRol(proyecto.getDiagramaActual().getEntidadRolGraficables(relacion.getEntidades()));
			
			this.controlador.dibujarGraficableFlotante(relacionGraf, TipoEvento.AGREGAR_GRAFICABLE_NUEVO);

			this.ventana = null;	
		}
		catch (RelacionException e1)
		{
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error al crear la Relacion", JOptionPane.ERROR_MESSAGE);
		}
		catch (SinNombreException e1)
		{
			JOptionPane.showMessageDialog(this.ventana, "La relación debe tener nombre.", "Relacion sin nombre", JOptionPane.ERROR_MESSAGE);
		} 
		catch (AtributoRepetidoException e1)
		{
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Atributo repetido", JOptionPane.ERROR_MESSAGE);
		}
		catch (EntidadRepetidaException e1)
		{
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error al crear la Relacion", JOptionPane.ERROR_MESSAGE);
		} 
		catch (IdExternoInexistenteException e1) 
		{// con esta interfaz grafica no podría pasar nunca
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Identificador externo inexistente", JOptionPane.ERROR_MESSAGE);		
		}
//		catch (NoEsObjetoDiagramableException e1)
//		{// no podría pasar nunca, en teoría
//			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error Inesperado", JOptionPane.ERROR_MESSAGE);
//		}
//		catch (NoEsObjetoNodoException e1)
//		{// no podría pasar nunca, en teoría
//			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error Inesperado", JOptionPane.ERROR_MESSAGE);
//		} 
		catch (NingunElementoSeleccionadoException e1)
		{// se supone q no puede pasar
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error Inesperado", JOptionPane.ERROR_MESSAGE);
		} catch (AtributoTipoNoSoportadoException e1) {
			// no debería suceder nunca
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error Inesperado", JOptionPane.ERROR_MESSAGE);
		} 
		catch (NoExisteEntidadGraficable e1) {
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error Inesperado", JOptionPane.ERROR_MESSAGE);
		} 
		catch (GraficableException e1) 
		{ // no debería pasar
			JOptionPane.showMessageDialog(this.ventana, e1.getMessage(), "Error Inesperado", JOptionPane.ERROR_MESSAGE);
		}
	}
}
